import Vue from 'vue'
import Vuex from 'vuex'
// import createPersistedState from 'vuex-persistedstate'
//import router from '@/router/router' // 如果要使用router,这里要使用同一个router对象，不要引用node_modules里面的
Vue.use(Vuex); //不知为什么这里还要use一下

import { lang_map } from '@/libs/lang' //语言编码与数字映射
import * as TYPE from '@/store/mapMutations'
import { API_QUERY_UNACTIVE } from '@/axios/api'
import { apiSuperUserList } from "@/views/uc/manage/js/manage.user.lib"; //mutations方法名映射

//代币基础数据
const TOKEN_BASE = {
	name       : TYPE.SYMBOL,
	// address      : process.env.NODE_ENV === 'development' ? 'TH6rZV3mLnHrt4LDCqwXG6vGJp2yR8FxmK' : 'TKbkX6nfmxdw7Vz56HxxuunZg1fdKUMtaM', //测试币种合约地址
	address:'TKbkX6nfmxdw7Vz56HxxuunZg1fdKUMtaM',
	decimal    : 8,
	toUsdtPrice: 1,
	pairAddress: 'TSAVam8mxVQ1ct55a2kXU6CSCGVVG4Em99', //trx-代币交易对地址
}
//导出
export default new Vuex.Store({

	// 考虑是否使用持久化（其实就是他妈把state里的数据，扔到localstorage里面）
	// 注意，只有改变了store, localstorage里面的vuex才会变更（或第一次创建）
	// plugins: [createPersistedState()],// vuex持久化

	state : {
		projectTitle: process.env.VUE_APP_TITLE,//项目名称，用于页面显示
		lp         : '0',//语言配置，0是中文
		loading    : false,//用于ele的loading效果，一般是异步请求会操作这个东西
		sender     : 'TKbkX6nfmxdw7Vz56HxxuunZg1fdKUMtaM',
		trxPrice   : '0.025',
		hideDabge  : true,//用户头像的小红点是否隐藏，
		superUser  : '',//超级用户
		
        //登录对象,注意这里的值与调用中的判断
		tornlinkToken: {
			token     : null,//注意，这里是一个地址
			xg        : 0,// 这里是余额
			balance   : 0,//这个也是余额，多弄了一个来耍
			trxBalance: -1,//写-1是为了显示判断好用
			code      : '',//推广码
        },
		
		//这里的xg，由于许多地方都用了，就不改了,多弄出个token来用
		xg   : { ...TOKEN_BASE },
		token: { ...TOKEN_BASE },
	},

	getters:{
		//计算是否登录
		isLogin:(state) => {
        	return state.tornlinkToken.token == null ? false : true
		},
		//是否超级用户
		isSuperUser:(state)=> {
		    return state.superUser.includes(state.sender) ? true : false
		}
	},

	mutations: {
		//设置语言
		[TYPE.SET_LP] (state,tag) {
			localStorage.setItem('lang',tag)
			state.lp = lang_map[tag]
		},

		//设置sender,就是钱包账号
		[TYPE.SET_SENDER] (state,value) {
			state.sender = value
		},

        //设置TX价格
        [TYPE.SET_TRX_PRICE] (state,value) {
            state.trxPrice = value
        },

        //设置代币与usdt汇率
        [TYPE.SET_TOKEN_USDT_PRICE] (state,value) {
            state.xg.toUsdtPrice = value;
        },


        //设置token, 也是sender,就是钱包账号
        [TYPE.SET_TOKEN] (state,value) {
            state.tornlinkToken.token = value
        },

        //设置登录账号的代币余额
        [TYPE.SET_XG_BALANCE] (state,value) {
            state.tornlinkToken.xg = value
            state.tornlinkToken.balance = value
        },

		//设置登录账号的trx余额
		[TYPE.SET_TRX] (state,value) {
			state.tornlinkToken.trxBalance = value
		},

        //调协钱包账号的推荐码
        [TYPE.SET_CODE] (state,value) {
            state.tornlinkToken.code = value
        },

		//设置是否隐藏头像小红点
		[TYPE.SET_HIDEDABGE] (state,value) {
			state.hideDabge = value
		},

		//设置是否隐藏头像小红点
		[TYPE.SET_SUPERUSER] (state,value) {
			state.superUser = value
		},

    },


	actions : {
		//获取未激活下线数，用来控制头像小红点
		[TYPE.QUERY_UNACTIVE] ({ state,commit,dispatch }) {
			return new Promise((resolve,reject) => {
				API_QUERY_UNACTIVE({ intrAddress:state.sender }).then(res => {
					if (res) {
						commit(TYPE.SET_HIDEDABGE, res.data > 0 ? false : true)
					}
					resolve()//注意如果外部没有then()回调这里resolve不用回传数据
				}).catch(err => {
					reject(err)
				})
			})

		},
		//从服务器读取超级用户
		[TYPE.GET_SUPER_USER] ({ state,commit,dispatch }) {
			return new Promise((resolve,reject) => {
				apiSuperUserList({},(res)=> {
				    if(res.resultFlag){
					    commit(TYPE.SET_SUPERUSER, res.data)
				    }
				})
			})

		},
	},

	//vuex模块化
	//页面中映射模块中的state： ...mapState('user',['userName','userAvatar','userId','userInfo'])
	modules : {
		//使用require.context来遍历加载文件中的模块对象
		/*...(r => {
			return r.keys().reduce((c, n) => {
				c[n.replace(/\.\/|\.js/gi, '')] = r(n).default
				return c
			}, [])
		})(require.context('./modules/', true, /\.js$/))*/
	}
})
